home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / UDP.H < prev    next >
C/C++ Source or Header  |  1989-09-07  |  2KB  |  65 lines

  1. #ifndef    NUDP
  2.  
  3. #include "global.h"
  4. #include "netuser.h"
  5.  
  6. /* User Datagram Protocol definitions */
  7.  
  8. #define    NUDP    20
  9.  
  10. /* Structure of a UDP protocol header */
  11. struct udp {
  12.     int16 source;    /* Source port */
  13.     int16 dest;    /* Destination port */
  14.     int16 length;    /* Length of header and data */
  15.     int16 checksum;    /* Checksum over pseudo-header, header and data */
  16. };
  17. #define    UDPHDR    8    /* Length of UDP header */
  18.  
  19. /* User Datagram Protocol control block
  20.  * Each entry on the receive queue consists of the
  21.  * remote socket structure, followed by any data
  22.  */
  23. struct udp_cb {
  24.     struct udp_cb *prev;    /* Linked list pointers */
  25.     struct udp_cb *next;
  26.     struct socket socket;    /* Local port accepting datagrams */
  27.     void (*r_upcall) __ARGS((struct iface *iface,struct udp_cb *,int));
  28.                 /* Function to call when one arrives */
  29.     struct mbuf *rcvq;    /* Queue of pending datagrams */
  30.     int rcvcnt;        /* Count of pending datagrams */
  31.     int user;        /* User link */
  32. };
  33. extern struct udp_cb *Udps[];    /* Hash table for UDP structures */
  34. #define    NULLUDP    (struct udp_cb *)0
  35.  
  36. /* UDP statistics counters */
  37. struct udp_stat {
  38.     int16 rcvd;        /* Packets received */
  39.     int16 sent;        /* Packets sent */
  40.     int16 cksum;        /* Checksum errors */
  41.     int16 unknown;        /* Unknown socket */
  42.     int16 bdcsts;        /* Incoming broadcasts */
  43. };
  44. extern struct udp_stat Udp_stat;
  45.  
  46. /* UDP primitives */
  47.  
  48. /* In udp.c: */
  49. int del_udp __ARGS((struct udp_cb *up));
  50. struct mbuf *htonudp __ARGS((struct udp *udp,struct mbuf *data,struct pseudo_header *ph));
  51. int ntohudp __ARGS((struct udp *udp,struct mbuf **bpp));
  52. struct udp_cb *open_udp __ARGS((struct socket *lsocket,
  53.     void (*r_upcall) __ARGS((struct iface *iface,struct udp_cb *,int))));
  54. int recv_udp __ARGS((struct udp_cb *up,struct socket *fsocket,struct mbuf **bp));
  55. int send_udp __ARGS((struct socket *lsocket,struct socket *fsocket,char tos,
  56.     char ttl,struct mbuf *data,int16 length,int16 id,char df));
  57. void udp_input __ARGS((struct iface *iface,struct mbuf *bp,struct ip *ip,
  58.     int rxbroadcast));
  59.  
  60. /* In udpcmd.c: */
  61. void st_udp __ARGS((struct udp_cb *udp,int n));
  62.  
  63. #endif    /* NUDP */
  64.  
  65.